//
//  LZBaseTableViewVC.swift
//  halikaPeso
//
//  Created by L-zh on 2024/12/18.
//

import UIKit
import MJRefresh
import DZNEmptyDataSet

class LZBaseTableViewVC:LZBaseVC {
    open lazy var tableView: UITableView = {
        [weak self] in
        guard let strongSelf = self else {return UITableView()}
        
        let tableView = UITableView(frame: .zero, style: strongSelf.style ?? UITableView.Style.plain)
        tableView.delegate = strongSelf
        tableView.dataSource = strongSelf
        tableView.tableFooterView = UIView.init()
        tableView.estimatedRowHeight = 0
        tableView.estimatedSectionFooterHeight = 0
        tableView.estimatedSectionHeaderHeight = 0
        tableView.emptyDataSetSource = strongSelf
        tableView.emptyDataSetDelegate = strongSelf
        
        return tableView
    }()
    
    public var  style: UITableView.Style?
    
    public var pageNo:Int = 1
    
    public var pageSize:Int = 20
    
    required  init(style: UITableView.Style) {
        self.style = style
       
        super.init(nibName: nil, bundle: nil)
    }
    
    required init?(coder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    
    func addRefreshHeader() {
        weak var weakSelft = self
        tableView.mj_header = MJRefreshNormalHeader(refreshingBlock: {
            weakSelft?.pageNo  = 1
            weakSelft?.setupData()
        })
    }
    
    func addRefreshFooter()  {
        weak var weakSelft = self
        
        tableView.mj_footer = MJRefreshAutoNormalFooter(refreshingBlock: {
            weakSelft?.pageNo  += 1
            weakSelft?.setupData()
        })
    }
}

extension LZBaseTableViewVC: UITableViewDelegate, UITableViewDataSource {
    
    func numberOfSections(in tableView: UITableView) -> Int {
        return self.viewModel.numberOfSections(in: tableView)
    }

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return self.viewModel.tableView(tableView, numberOfRowsInSection: section)
    }
    
    func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
        return self.viewModel.tableView(tableView, viewForHeaderInSection: section)
    }
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        return self.viewModel.tableView(tableView, cellForRowAt: indexPath)
    }
    
    func tableView(_ tableView: UITableView, viewForFooterInSection section: Int) -> UIView? {
       return self.viewModel.tableView(tableView, viewForFooterInSection: section)
    }

    func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
        return self.viewModel.tableView(tableView, heightForHeaderInSection: section)
    }
    
    func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {
        return self.viewModel.tableView(tableView, heightForFooterInSection: section)
    }
    
    func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
        return self.viewModel.tableView(tableView, heightForRowAt: indexPath)
    }
    
    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
      self.viewModel.tableView(tableView, didSelectRowAt: indexPath)
    }
    
    func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool {
        return self.viewModel.tableView(tableView, canEditRowAt: indexPath)
    }
    func tableView(_ tableView: UITableView, titleForDeleteConfirmationButtonForRowAt indexPath: IndexPath) -> String? {
        return self.viewModel.tableView(tableView, titleForDeleteConfirmationButtonForRowAt: indexPath)
    }
    func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCell.EditingStyle, forRowAt indexPath: IndexPath) {
        self.viewModel.tableView(tableView, commit: editingStyle, forRowAt: indexPath)
    }
   
}

extension LZBaseTableViewVC:DZNEmptyDataSetSource,DZNEmptyDataSetDelegate {
    
    func image(forEmptyDataSet scrollView: UIScrollView!) -> UIImage! {

        return UIImage(named: "buxiaosheng")
    }
    
//    func title(forEmptyDataSet scrollView: UIScrollView!) -> NSAttributedString! {
//
//        return NSAttributedString(string: "暂无数据", attributes: [NSAttributedString.Key.font: UIFont.boldSystemFont(ofSize:16.0),NSAttributedString.Key.foregroundColor:AppText99Color])
//    }
    func emptyDataSetWillAppear(_ scrollView: UIScrollView!) {
        scrollView.backgroundColor = UIColor.groupTableViewBackground
    }
    func emptyDataSetDidDisappear(_ scrollView: UIScrollView!) {
        scrollView.backgroundColor = UIColor.white
    }
    
    func emptyDataSetShouldDisplay(_ scrollView: UIScrollView!) -> Bool {
        return false
    }
}
